home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / lang / SmallEiffel.lha / SmallEiffel / lib_std / integer_ref.e < prev    next >
Text File  |  1998-12-22  |  3KB  |  131 lines

  1. -- This file is  free  software, which  comes  along  with  SmallEiffel. This
  2. -- software  is  distributed  in the hope that it will be useful, but WITHOUT 
  3. -- ANY  WARRANTY;  without  even  the  implied warranty of MERCHANTABILITY or
  4. -- FITNESS  FOR A PARTICULAR PURPOSE. You can modify it as you want, provided
  5. -- this header is kept unaltered, and a notification of the changes is added.
  6. -- You  are  allowed  to  redistribute  it and sell it, alone or as a part of 
  7. -- another product.
  8. --          Copyright (C) 1994-98 LORIA - UHP - CRIN - INRIA - FRANCE
  9. --            Dominique COLNET and Suzanne COLLIN - colnet@loria.fr 
  10. --                       http://www.loria.fr/SmallEiffel
  11. --
  12. class INTEGER_REF
  13.  
  14. inherit
  15.    NUMERIC
  16.       undefine out_in_tagged_out_memory, fill_tagged_out_memory
  17.       redefine
  18.      infix "^", prefix "-", prefix "+"
  19.       end;
  20.    COMPARABLE
  21.       redefine compare, out_in_tagged_out_memory, 
  22.      fill_tagged_out_memory
  23.       end;
  24.    
  25. creation make
  26.    
  27. feature 
  28.  
  29.    item: INTEGER;
  30.    
  31.    make(value: INTEGER) is
  32.       do
  33.      item := value
  34.       end;
  35.    
  36. feature
  37.    
  38.    set_item(value: like item) is
  39.       do
  40.      item := value;
  41.       end;
  42.  
  43.    infix "+" (other: like Current): like Current is
  44.       do
  45.      !!Result.make (item + other.item)
  46.       end;
  47.    
  48.    infix "-" (other: like Current): like Current is
  49.       do
  50.      !!Result.make (item - other.item)
  51.       end;
  52.  
  53.    infix "*" (other: like Current): like Current is
  54.       do
  55.      !!Result.make (item * other.item)
  56.       end;
  57.  
  58.    infix "/" (other: like Current): DOUBLE_REF is
  59.       do
  60.      !!Result.make (item / other.item)
  61.       end;
  62.  
  63.    infix "//" (other: like Current): like Current is
  64.      -- Integer division by `other'.
  65.       require
  66.      divisible (other)
  67.       do
  68.      !!Result.make (item // other.item)
  69.       end;
  70.  
  71.    infix "\\" (other: like Current): like Current is
  72.      -- Remainder of integer division by `other'.
  73.       require
  74.      valid_modulus: divisible (other)
  75.       do
  76.      !!Result.make (item \\ other.item)
  77.       end;
  78.  
  79.    infix "^" (exp: INTEGER): like Current is
  80.       do
  81.      !!Result.make (item ^ exp)
  82.       end;
  83.  
  84.    infix "<" (other: like Current): BOOLEAN is
  85.       do
  86.      Result := (item < other.item)
  87.       end;
  88.  
  89.    prefix "+": like Current is
  90.       do
  91.      !!Result.make (item)
  92.       end;
  93.  
  94.    prefix "-": like Current is
  95.       do
  96.      !!Result.make (-item)
  97.       end;
  98.  
  99.    compare (other: like Current): INTEGER is
  100.       do
  101.      Result := item - other.item
  102.       end;
  103.  
  104.    divisible(other: like Current): BOOLEAN is
  105.       do
  106.      Result := (other.item /= 0)
  107.       end;
  108.  
  109.    one: like Current is
  110.       do
  111.      !!Result.make (1)
  112.       end;
  113.  
  114.    zero: like Current is
  115.       do
  116.      !!Result.make (0)
  117.       end;
  118.  
  119.    out_in_tagged_out_memory, fill_tagged_out_memory is
  120.       do
  121.      item.fill_tagged_out_memory;
  122.       end;
  123.  
  124.    hash_code: INTEGER is
  125.       do
  126.      Result := item.hash_code;
  127.       end;
  128.  
  129. end -- INTEGER_REF
  130.  
  131.